import Vue from 'vue'
import Axios from 'axios'

export function dengl2 (_this) { // 重新登录
  if (_this.$store.state.usertf === '2') {
    _this.post(geturl() + 'api/user/account/profile', {}, headers(_this))
      .then(function (data) {
        if (data.data.message === '用户不存在') {
          alert('用户不存在')
        } else if (data.data.code === 401) {
          alert('用户已过期,请登录!')
          goOuts(_this)
          _this.$router.replace('/home')
        } else {
          var h1 = ''
          var e1 = ''
          for (let i = 0; i < 10; i++) {
            if (i < 5) {
              h1 += parseInt(Math.random() * (10 - 1) + 1).toString()
            } else {
              e1 += parseInt(Math.random() * (10 - 1) + 1).toString()
            }
          }
          var tokens = clearNum(_this.$store.state.token)
          _this.$store.commit('getToken', h1 + tokens + e1)
          _this.$store.commit('getNowUserIntro', data.data.data)
        }
      })
      .catch(function () {
        alert('用户已过期,请登录!')
        goOuts(_this)
        _this.$router.replace('/home')
      })
  }
}

export function homeSwearch (datas, _this) { // 主页搜索文章
  _this.post(geturl() + 'api/user/show/articles', datas)
    .then(function (data) {
      _this.$store.commit('getHomeSearchArticle', data.data.data.result)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function denglu (datas, fn, _this) { // 登录
  Axios.post(geturl() + 'api/user/login', {
    username: datas.username,
    password: datas.password
  })
    .then((data) => {
      var h1 = ''
      var e1 = ''
      for (let i = 0; i < 10; i++) {
        if (i < 5) {
          h1 += parseInt(Math.random() * (10 - 1) + 1).toString()
        } else {
          e1 += parseInt(Math.random() * (10 - 1) + 1).toString()
        }
      }
      if (data.data.message === 'OK') {
        _this.$store.commit('getToken', h1 + data.data.data.token + e1)
        _this.$store.commit('saveuser', '2')
        _this.$store.commit('getNowUserIntro', data.data.data.user)
        _this.$store.commit('userNames', data.data.data.user.nickname)
        fn()
        _this.show = ' '
      } else if (data.data.code === 0) {
        _this.show = '用户名或密码错误'
      } else if (data.data.message === '出错') {
        _this.show = '没有此用户'
      }
    })
    .catch(() => {
      alert('密码或者用户名错误')
    })
}

export function goOut (_this) { // 退出登录
  _this.post(geturl() + 'api/user/logout', {}, headers(_this))
    .then(function (data) {
      _this.$store.commit('getToken', '')
      alert(data.data.message)
      _this.$router.replace('/home')
    })
    .catch(function () {
      _this.$store.commit('getToken', '')
      _this.$router.replace('/home')
    })
}

export function userLog (datas, _this) { // 登陆日志
  _this.post(geturl() + 'api/user/account/login/user/ip/list', datas, headers(_this))
    .then(function (data) {
      for (let i = 0; i < data.data.data.length; i++) {
        data.data.data[i].index = i + 1
      }
      _this.logs = data.data.data
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function updataAvatar (datas, _this) { // 上传图片
  _this.post(geturl() + 'api/user/account/update/avatar', datas, headers(_this))
    .then(function (data) {
      alert(data.data.message)
      if (data.data.message === '头像修改成功') {
        dengl2(_this)
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function addsUser (datas, _this) { // 添加用户
  _this.post(geturl() + 'api/admin/sign', datas, headers(_this))
    .then(function (data) {
      alert(data.data.message)
    })
    .catch(function (err) {
      alert('失败')
      console.log(err)
    })
}

export function allArticle (datas, _this) { // 管理查询所有文章
  _this.post(geturl() + 'api/admin/manger/articles/list', datas, headers(_this))
    .then(function (data) {
      _this.$store.state.adminArticle = data.data.data
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function checkArticle (id, datas, _this) { // 审核/删除，文章
  _this.put(geturl() + 'api/admin/verify/' + id, datas, headers(_this))
    .then(function (data) {
      alert(data.data.message)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function changeUserIntro (datas, _this) { // 更新信息
  _this.post(geturl() + 'api/user/account/update/user/account', datas, headers(_this))
    .then(function (data) {
      if (data.data.code === 401) {
        alert('用户已过期，请重新登录')
        goOuts(_this)
        _this.$router.replace('/home')
      } else if (data.data.message === '更新用户信息成功') {
        _this.name = ''
        _this.github = ''
        _this.phone = ''
        _this.email = ''
        _this.qq = ''
        _this.intro = ''
        _this.initSuccess = true
        setTimeout(() => {
          _this.initSuccess = false
        }, 2000)
        dengl2(_this)
      } else {
        alert(data.data.message)
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function dropArticle (id, index, _this) { // 管理删除文章
  var tokens = clearNum(_this.$store.state.token)
  var headers = {'Authorization': 'Bearer ' + tokens}
  Axios.delete(geturl() + 'api/user/delete/article/' + id, {
    headers
  })
    .then(function (data) {
      _this.$store.state.myArticle.result.splice(parseInt(index), 1)
      alert(data.data.message)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function initArticle (id, _this) { // 管理编辑文章
  _this.post(geturl() + 'api/user/show/article/edit/' + id, {}, headers(_this)
  )
    .then(function (data) {
      _this.$store.commit('getArticalTag', data.data.data[0].tags)
      _this.$store.commit('getArticalSummary', data.data.data[0].summary)
      _this.$store.commit('getArticalContent', data.data.data[0].content)
      _this.$store.commit('getArticalTitle', data.data.data[0].title)
      _this.$store.commit('getArticalClass', data.data.data[0].categoryDTO.name)
      _this.title = data.data.data[0].title
      _this.summary = data.data.data[0].summary
      _this.content = data.data.data[0].content
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function initArtishuju (datas, _this) { // 更新文章数据
  _this.post(geturl() + 'api/user/addArticle', datas, headers(_this))
    .then(function (data) {
      _this.$store.commit('changeWriteDisplay', false)
      if (data.data.message === '添加文章成功') {
        _this.$store.commit('getArticalTag', '')
        _this.$store.commit('getArticalClass', '')
        _this.$router.replace('/writeOut')
        alert(data.data.message)
      } else if (data.data.code === 401) {
        alert('用户已过期，请重新登录')
        goOuts(_this)
        _this.$router.replace('/home')
      } else {
        alert(data.data.message)
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function getOverView (articleSize, talkSize, viewSize, userSize) { // 主页面总数据
  Axios.post(geturl() + 'api/user/count/article')
    .then(function (data) {
      // 调用计数器
      time(articleSize, data.data.data.counts['COUNT(id)'], 50)
      time(talkSize, data.data.data.counts['SUM(comment_size)'], 10)
      time(viewSize, data.data.data.counts['SUM(view_size)'], 10)
      time(userSize, data.data.data.users['COUNT(id)'], 100)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function searchArticleByTitle (datas, _this) { // 搜索文章、文章分页
  _this.post(geturl() + 'api/user/account/show/center/article', datas)
    .then(function (data) {
      _this.$store.commit('getMyArticle', data.data.data)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function gg (datas, _this) { // 公告数据
  _this.post(geturl() + 'api/admin/bulletin/bulletion/show/all', datas) // page size
    .then(function (data) {
      if (_this.$route.path === '/home') {
        var arr = []
        for (let i = 0; i < data.data.data.result.length; i++) {
          if (data.data.data.result[i].avatar) {
            arr.push({
              id: data.data.data.result[i].id,
              avatar: data.data.data.result[i].avatar
            })
          }
        }
        _this.$store.commit('getHomeImg', arr)
        console.log('图片', arr)
        _this.$store.commit('getHomeGg', data.data.data)
      } else if (_this.$route.path === '/home/notice') {
        _this.$store.commit('getGg', data.data.data)
      } else if (_this.$route.path === '/adminuser') {
        _this.$store.state.adminGg = data.data.data
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function dropUser (id, _this) { // 删除用户
  Axios.delete(geturl() + 'api/admin/delete/user/' + id, {
    headers: headers(_this)
  })
    .then(function (data) {
      alert(data.data.message)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function allUser (datas, _this) { // 查询用户
  _this.post(geturl() + 'api/admin/manger/show/user/list/all', datas, headers(_this))
    .then(function (data) {
      if (datas.get('keywords') === 'like') {
        var dataa = {
          data: {
            data: {
              tatal: data.data.data.length,
              result: data.data.data,
              resultSize: data.data.data.length
            }
          }
        }
        _this.$store.state.adminUser = dataa.data.data
      } else {
        _this.$store.state.adminUser = data.data.data
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function changeUser (datas, _this) { // 修改用户密码
  _this.put(geturl() + 'api/admin/update/user/password', datas, headers(_this))
    .then(function (data) {
      alert(data.data.message)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function dropNto (id, _this) { // 删除公告
  Axios.delete(geturl() + 'api/admin/bulletin/delete/bulletion/' + id, {
    headers: headers(_this)
  })
    .then(function (data) {
      alert(data.data.message)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function adminNto (id, _this) { // 编辑公告
  _this.post(geturl() + 'api/admin/bulletin/update/bulletion/' + id)
    .then(function (data) {
      _this.content = data.data.data.content
      _this.title = data.data.data.title
      _this.defau = data.data.data.avatar
      _this.name = data.data.data.name
      _this.gg = data.data.data.bulletinType
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function getNto (id, _this) { // 公告详情
  _this.post(geturl() + 'api/admin/bulletin/update/bulletion/' + id)
    .then(function (data) {
      _this.$store.commit('getGgX', data.data.data)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function sendGg (datas, _this) { // 管理员发布公告
  _this.post(geturl() + 'api/admin/bulletin/send/bulletion', datas, headers(_this))
    .then(function (data) {
      if (datas.get('id') && data.data.message === '添加公告信息成功') {
        alert('更新成功')
      } else {
        alert(data.data.message)
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function getCenterArticle (datas, _this) { // 个人中心文章数据
  _this.post(geturl() + 'api/user/account/show/center/article', datas, headers(_this))
    .then(function (data) {
      _this.$store.commit('getMyArticle', data.data.data)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function getArticleUser (datas, datasss, _this) { // 用户主页文章数据
  _this.post(geturl() + 'api/user/account/show/center/article', datasss)
    .then(function (data) {
      _this.$store.commit('getMyArticle', data.data.data)
      // 用户主页信息数据
      if (datas.get('username') !== _this.$store.state.nowUserIntro.username) {
        _this.post(geturl() + 'api/user/account/findUser', datas)
          .then(function (datass) {
            if (datass.data.message === '用户不存在') {
              alert('用户不存在')
            } else {
              _this.$store.commit('getMyHome', datass.data.data)
              _this.$router.push({
                path: '/Myhome/article',
                query: {
                  name: datas.get('username')
                }
              })
            }
          })
          .catch(function () {
            alert('用户不存在')
          })
      } else if (_this.$store.state.homeTf === 1 ||
        (datas.get('username') === _this.$store.state.nowUserIntro.username)) {
        _this.post(geturl() + 'api/user/account/profile', {}, headers(_this))
          .then(function (datass) {
            if (datass.data.message === '用户不存在') {
              alert('用户不存在')
            } else if (datass.data.code === 401) {
              alert('用户已过期,请登录!')
              goOuts(_this)
              _this.$router.replace('/home')
            } else {
              _this.$store.commit('getMyHome', datass.data.data)
              _this.$router.push({
                path: '/Myhome/article',
                query: {
                  name: datas.get('username')
                }
              })
            }
          })
          .catch(function () {
            alert('用户不存在')
          })
      }
    })
    .catch(function (err) {
      alert('404 数据错误')
      console.log(err)
    })
}

export function sendArtishuju (datas, _this) { // 发布文章数据
  var tokens = clearNum(_this.$store.state.token)
  var headers = {'Authorization': 'Bearer ' + tokens}
  _this.post(geturl() + 'api/user/addArticle', datas, headers)
    .then(function (data) {
      if (data.data.message === '内容不能为空') {
        alert('内容不能为空')
      } else if (data.data.message === '标题不能为空') {
        alert('标题不能为空')
      } else if (data.data.message === '摘要不能为空') {
        alert('摘要不能为空')
      } else if (data.data.message === '摘要只能是20到50000个字符') {
        alert('摘要只能是20到50000个字符')
      } else if (data.data.code === 401) {
        alert('用户已过期，请重新登录')
        goOuts(_this)
        _this.$router.replace('/')
      } else if (data.data.message === '添加文章成功') {
        _this.$store.commit('getArticalTag', '')
        _this.$store.commit('changeWriteDisplay', false)
        _this.$router.replace('/writeOut')
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function getHomeArticals (datas, _this) { // 得到文章数据
  _this.post(geturl() + 'api/user/show/articles', datas)
    .then(function (data) {
      if (datas.get('keywords') === 'remen') {
        _this.$store.commit('getBtnartical', data.data.data)
      } else if (datas.get('orderby') === 'createTime') {
        _this.$store.commit('getBtnartical', data.data.data.result)
      } else if (datas.get('keywords') === 'category') {
        _this.$store.commit('getArtical', data.data.data)
      }
    })
    .catch(function (err) {
      console.log(err)
      alert(err + '数据出错')
    })
}

export function getArticalSmall (id, _this) { // 得到点击的文章的数据,跳转
  _this.post(geturl() + 'api/user/show/articles/' + id)
    .then(function (data) {
      if (data.data.message === 'OK') {
        _this.$store.commit('getNowArticals', data.data.data)
        _this.$router.push({path: '/aricoal/small', query: {id: id}})
      } else {
        alert('还在审核中！(。・＿・。)ﾉ....I’m sorry~')
      }
    })
    .catch(function (err) {
      console.log(err)
      alert(err + '数据出错')
    })
}

// 得到文章的所有评论
export function getNowTalk (ids, datas, datass, _this) {
  _this.post(geturl() + 'api/user/show/comment/' + ids, datas)
    .then(function (data) {
      _this.$store.commit('getNowTalks', data.data.data)
      const parentData = data.data.data.result
      for (let i = 0; i < data.data.data.result.length; i++) {
        let zid = data.data.data.result[i].comment.id
        _this.post(geturl() + 'api/user/show/comment/zi/' + zid, datass)
          .then(function (datas) {
            let result = datas.data.data.result
            var total = datas.data.data.tatal
            let s = result.filter(item => {
              return parentData[i].id === item.pid
            })
            Vue.set(parentData[i], 'childData', s)
            var pages = []
            for (let i = 0; i < Math.ceil(total / 5); i++) {
              pages.push(i + 1)
            }
            Vue.set(parentData[i], 'totals', pages)
          })
          .catch(function (err) {
            console.log(err)
          })
      }
      _this.$store.commit('getNowTalkSmall', parentData)
    })
    .catch(function (err) {
      alert(err + '数据出错')
    })
}

export function dropCommtent (id, dom, dom2, _this) { // 删除评论
  Axios.delete(geturl() + 'api/send/comments/' + id, {
    headers: headers(_this)
  })
    .then(function (data) {
      if (data.data.message === '没有操作权限') {
        alert('这不是你的评论')
      } else if (data.data.message === '删除评论成功') {
        if (dom2 === null) {
          dom.parentNode.style.display = 'none'
        } else {
          dom2.parentNode.style.display = 'none'
        }
        alert('删除评论成功')
      } else if (data.data.message === '评论不存在') {
        alert('评论已经被删除')
      } else {
        alert('失败,请刷新')
      }
    })
    .catch(function () {
      alert('错误')
    })
}

export function getZiPage (datas, id, master, _this) { // 子评论分页数据
  _this.post(geturl() + 'api/user/show/comment/zi/' + id, datas)
    .then(function (data) {
      _this.$store.state.nowTalkSmall[master].childData = data.data.data.result
    })
}

export function sendTalk (datas, ids, datao, datat, _this) { // 发送文章评论给后端
  _this.post(geturl() + 'api/send/comment', datas, headers(_this))
    .then(function (data) {
      if (data.data.message === '处理成功') {
        getNowTalk(ids, datao, datat, _this)
        alert('发送成功！')
      } else if (data.data.code === 401) {
        alert('登录已过期，请重新登录')
        goOuts(_this)
        _this.$router.push('/home')
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function sendSmallTalk (datas, datass, master, _this) { // 发送文章子评论给后端
  _this.post(geturl() + 'api/send/comment', datas, headers(_this))
    .then(function (data) {
      if (data.data.code === 401) {
        alert('登录已过期，请重新登录')
        goOut(_this)
        _this.$router.push('/home')
      }
      var zid = datas.get('commentId')
      getZiPage(datass, zid, master, _this)
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function clickZan (id, _this) { // 文章点赞
  _this.post(geturl() + 'api/user/createZanByArticle', id, headers(_this))
    .then(function (data) {
      if (data.data.message === '您已经点过赞了') {
        alert('已经点过了，还点毛线啊。')
      } else if (data.data.code === 401) {
        alert('登录已过期，请重新登录')
        goOuts(_this)
        _this.$router.push('/home')
      } else {
        _this.nows.zanSize += 1
        alert('点赞成功！Thanks♪(･ω･)ﾉ')
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function createZanByComment (id, _this) { // 评论点赞
  var tokens = clearNum(_this.$store.state.token)
  var headers = {'Authorization': 'Bearer ' + tokens}
  _this.post(geturl() + 'api/user/createZanByComment', id, headers)
    .then(function (data) {
      if (data.data.code === 401) {
        alert('登录已过期，请重新登录')
        goOuts(_this)
        _this.$router.push('/home')
      }
    })
    .catch(function (err) {
      console.log(err)
    })
}

export function viewArticle (id, _this) { // 文章浏览量增长
  _this.put(geturl() + 'api/user/article/view', id)
}

function headers (_this) { // headers
  var tokens = clearNum(_this.$store.state.token)
  return {'Authorization': 'Bearer ' + tokens}
}

function geturl () { // 数据url地址
  const i = ''
  return i
}

function clearNum (val) {
  return val.replace(/^\d{5}/g, '').replace(/\d{5}$/g, '')
}

function goOuts (_this) {
  _this.$store.commit('saveuser', '1')
}

function time (user, max, long) { // 计数器
  var i = 0
  var timer
  timer = setInterval(function addCount () {
    i++
    if (i > max) {
      clearInterval(timer)
      return 0
    }
    user.splice(0, 1, i)
  }, long)
}
